docs: function (module) {
                  _.defaults(module, {
                      name: null,
                      moduleClass: null,
                      route: null,
                      attributes: null,
                      relative: false
                  });
  
                  if (!module.name) {
                      throw "module cannot be added: module name is required";
                  }
  
                  if (!module.moduleClass) {
                      throw "no moduleClass defined for module";
                  }
  
                  if (this.$modules.hasOwnProperty(module.name)) {
                      throw "module with name '" + module.name + "' already registered";
                  }
  
                  this.$modules[module.name] = module;
  
                  if (module.route) {
                      if (!this.$.router) {
                          throw "defining modules with routes requires a router instance to be set";
                      }
  
                      var self = this;
                      this.$.router.addRoute({
                          name: module.name,
                          route: module.route,
                          fn: function (routeContext) {
  
                              // route triggered -> load module
                              self.loadModule(module, routeContext.callback, routeContext);
                          }.async()
                      });
                  }
  
              }