One of the problems I hit was that I would get really grumpy when particular things were asked for.
Once I learnt to think about why I was getting grumpy, and vocalize the actual problem it was easier.
e.g. A client said to me recently could clicking the blog link open a new window? When I started programming I'd have said "Yes! I can do that!". Then after a few years I'd have got grumpy about it and said something passive aggressive "I guess so. That's not normal though...". Now I think about it, realized I hate it when links on the web behave unexpectedly and that's what's making me grumpy. Then explain to the client that that's you shouldn't take control of other people's browsers on public websites, and the better way is to have a clear link to get back to the shop on the blog.
Related to what you are saying, I read somewhere, many years ago, that the best thing to do in cases where you feel like being grumpy or dismissing something that was asked for was to, instead, ask 'why'.
The reasoning is that sometimes what the client is asking is his best guess as meeting a need he has. By asking why, chances are you'll get to the actual need and, oftentimes, find a better solution where both the client and you are happy.
Over the years as a grumpy developer, this piece of advice has served me wonderfully well.
I agree, diplomacy is a critical skill. Grumpiness is basically anger, and all anger comes from pain. Programming is fun, but getting yelled because we missed a deadline or got some feature slightly wrong is painful. When Suzy asks for a change to the link, she's not trying to cause pain, but it's easy for all that previous pain to come channeling through and end up all over her. Road rage works the same way.