I be inclined to agree but I only advocate "an exceptionally detailed spec" in the case of outsourcing. This is due to a combination of two things:
1. The lower levels of communication between the client and development house and 2. The literal level that outsource companies will take the client at.
Having worked on projects that came bundled with excessively detailed specs, I would agree that said defining detail is a fools errand since it often gets changed further down the line.
However, I don't agree with your assertion that "if the project fails/runs over budget/is late then it's due to a failing on the project management side". For example, what if the dev. company simply aren't as talented/responsive as the client was first led to believe?
Some outsource companies and people have lower levels of communication but not all. We work with awesome designers, developers and support staff all around the world and communicate regularly with everyone.
Not all companies lack common sense to take specs literally.
It takes a decent project manager and a good understanding of what the requirements are on both the management and development sides at any given moment during the project. That's easier in-house but there's no good reason why it won't work with an outsourcing company too.
Ultimately, if the project fails/runs over budget/is late then it's due to a failing on the project management side.