Notice that we also added a ViewFactory so that the ViewModel is not a hard dependency in the controller. Isn't it convenient that the ViewModel fits into this pattern, as an invokable with an optional array constructor parameter?
I'd recommend using the setter, as I did in Module.php, as it takes care of canonicalization of the name, and you can use the same name format that you use everywhere else (e.g. 'ViewModel' instead of 'viewmodel').
The only function we are required to implement is validatePlugin, which checks to see if it is the correct type, and any other checking you need to do.
And update the getControllerConfig method to accomodate the new constructor (adding the viewFactory)