The documentation for Marionette.Controller says that it is "a multi-purpose object to use as a controller for modules and routers". However, I see that in many cases people do not use the Marionette.Controller with their routers. For example, David Sulc uses a plain old object called API in his book:
    ContactsAppRouter.Router = Marionette.AppRouter.extend({
      appRoutes: {
        "contacts(/filter/criterion::criterion)": "listContacts",
        "contacts/:id": "showContact",
        "contacts/:id/edit": "editContact"
      }
    });
    var API = {
      listContacts: function(criterion){
        require(["apps/contacts/list/list_controller"], function(ListController){
          executeAction(ListController.listContacts, criterion);
        });
      },
      ...
    };
    ContactManager.addInitializer(function(){
      new ContactsAppRouter.Router({
        controller: API
      });
    });
Is this purely a matter of taste or is there a specific advantage to this pattern?
A followup question: What is a good use case for using a Marionette Controller over a pure JavaScript object? I have not yet found a compeling example.