1. Perspective. Ability to look from business perspective apart from (typical) code-level perspective. Understanding why all the coding is done and where are the fruits for the customer/user whoever it is.
2. Questions. Asking why something is done that way. Discussing answers. Showing own point of view. Trying to be objective in the whole thing.
3. Communication. It doesn’t have to be great but you should be able to talk with non-developers in a way which is understandable by the other side.
4. Fallibility. Actually everyone is fallible, but not everyone is able to admit that.
5. Experience. From different situation, different systems, different issues, different architectures, different teams, different technologies, different environments. The more the better.
6. Learning. Will and ability to self-develop, learn (quickly) new things and adapt to new environments.
7. Digging. Understanding a problem to the very bottom. Trying to find out what’s happening under the hood. Rejecting easy trial-and-error explanations.
8. Reason. Every thing which is developed serves some purpose and using common sense one can easily decide which actions are justified and which are not.
9. Hobby. Treating development as at least something more than just a job. Will to do develop something just for yourself, not because you were forced to.
10. Quality. Just remember the quality is a weak point of software development and be willing to do something about your little piece of that crap.
None of them are actually about any particular technology. None of them is about any particular software development methodology. There’s no answer to specialization versus versatility question.
Things which differentiate good developers aren’t those which used to be considered as their core qualities.