I can tell you that for this particular person he needed to be silo'd and given time.
A good manager would realize that his quality of work was top notch but that he was at times difficult to get along with. He was a perfectionist who held those around him to the same standards, and that often clashed with the business needs and even sometimes other teammates. A business generally isn't concerned with the product being perfect, they're more concerned with it getting to market on time.
So my suggestion to any manager that has an employee like this: Value him for what he is. Put him on MISSION CRITICAL tasks, where you need a rock solid implementation. Let him work for 2 weeks without interruption.
For other tasks that are perhaps not as "critical", throw other team mates at them.
It's always case specific, but it usually involves the manager supporting them by providing time and/or space. rubicon33's example and response is a great one. Put them in a situation where their strengths can be well utilized and the effect of their weaknesses minimized.
Also, not everybody has the personality or energy to constantly stand up for themselves. A lot of people will eventually crumble or leave. Don't make it so the only way the employee can do their best (e.g. what rubicon33 describes) is if they put their foot down and scream.