Quais são as diferenças entre o Presenter, Presentation Model, ViewModel e Controller?

Eu tenho uma boa idéia de como cada um desses padrões funciona e conhece algumas das pequenas diferenças entre eles, mas eles são realmente tão diferentes um do outro?

Parece-me que o Presenter, Presentation Model, ViewModel e Controller são essencialmente o mesmo conceito.

Por que não consegui classificar todos esses conceitos como controladores? Sinto que isso pode simplificar bastante toda a ideia.

Alguém pode dar uma descrição clara de suas diferenças?

Quero esclarecer que compreendo como os padrões funcionam e que a maioria deles foi implementada em uma tecnologia ou outra. O que realmente estou procurando é a experiência de alguém com um desses padrões e por que eles não considerariam seu ViewModel um controlador, por exemplo.

Vou dar alguns pontos de reputação para isso, mas estou procurando uma resposta muito boa.

questionAnswers(6)

yourAnswerToTheQuestion