docs: function getOrCreatePlugin(name, options) {
    var app      = this;
    var defaults = app.utils.defaults;
    var is       = app.utils.is;
  
    if(!name) throw new Error('Missing model plugin name');
  
    var registered = is.string(name) && app._modelPlugins[name];
  
    // Plugin is registered
    // -> return the plugin
    if(registered && !options) {
      return app._modelPlugins[name];
    }
  
    // Plugin is registered and options were passed
    // -> invoke plugin with options and return
    if(registered && options) {
      return app._modelPlugins[name](options);
    }
  
    // Model isn't registered
    if(!registered) {
  
      // Set default options
      options = defaults({
        module: name
      }, options || {});
  
      // module is a string
      // -> require it
      if(is.string(options.module)) {
        options.module = app.requireFn(options.module);
      }
  
      // module isn't a Function
      // -> throw an Error
      if(!is.fn(options.module)) {
        throw new Error('Plugin invalid or not found: ' + name);
      }
  
      // module is a function and options were passed
      // -> invoke plugin with options
      else if(options.options) {
        options.module = options.module(options.options);
      }
  
      // Register the plugin
      app._modelPlugins[name] = options.module;
  
      // Return the plugin
      return app._modelPlugins[name];
    }
  }