>> Aber damit werde ich wohl nicht alleine im Wald stehen.
Nein, auf keinen Fall

Es scheinen sich aber auch schon zwei grundverschiedene Ansätze herauszukristallisieren, die jedoch noch nicht wirklich getrennt werden:
- Für jedes (User-)Control existiert ein ViewModel (oder "Presentation Model"); z.B. MainWindowViewModel, OptionsTabPageViewModel
- Es existieren ViewModels, die von Controls dargestellt werden; z.B. AddNewCustomerViewModel, OverviewViewModel
Während der erste Ansatz sehr UI-orientiert ist, und häufig zusammen mit der deklarativen Erzeugung des ViewModels im XAML-Code eines Controls einhergeht, abstrahiert das ViewModel im zweiten das UI.
Die größten Unterschiede der beiden Ansätze offenbaren sich auch erst auf den zweiten Blick:
Hält man sich an die erste Interpretation, sind ValueConverter etc. tabu: Das ViewModel liefert alle Daten vorformatiert an das UI; es ist bekannt, welcher Typ von Steuerelement an eine Property gebunden wird. Das UI wird auf diese Weise völlig logikfrei; alle Logik steckt im ViewModel.
Das ViewModel gibt vor, wie die Daten angezeigt werden; nur das Aussehen bleibt über Styles etc. im View.
Hingegen verfolgt der zweite Ansatz eine etwas andere Absicht: Ein passives View. Dabei ist es weniger wichtig, dass dieses keinerlei Logik enthält; diese sollte nur rein passiv sein. Was heißt das konkret? Es darf zwar Logik zur Formatierung existieren; diese darf jedoch ihre Parameter nur per DataBinding vom ViewModel beziehen.
Die ViewModels repräsentieren hier also keine konkreten Controls, sondern vielmehr die Anliegen: Im ViewModel ist zwar vorgegeben, in welcher Form die Daten angezeigt werden (Liste, Baumstruktur, etc.), es formatiert jedoch keine Daten.
So wird zwar unterm Strich das UI auch logikfrei, aber auf eine ganz andere Art.
Ein praktisches, aber recht übersichtliches Beispiel:
Es soll eine Person dargestellt werden, deren Name in der Form "Nachname, Vorname" angezeigt werden soll.
Erster Ansatz (der XAML-Code reicht aus, um zu verdeutlichen, was ich sagen will):
<UserControl ...>
<TextBlock Text="{Binding Path=FullName}" />
</UserControl>
Zweiter Ansatz:
<UserControl ...>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=LastName}" />
<TextBlock Text=", " />
<TextBlock Text="{Binding Path=FirstName}" />
</StackPanel>
</UserControl>
Was ist nun "richtig"?
Ich weiß es ehrlich gesagt nicht