code: function(o) {
  
              if (!o || !o.name || !o.type || (!o.path && !o.fullpath)) {
                  return false;
              }
  
              o.ext = ('ext' in o) ? o.ext : true;
              o.requires = o.requires || [];
  
              this.moduleInfo[o.name] = o;
              this.dirty = true;
  
              return true;
          }
docs: Add a new module to the component metadata.
  <dl>
  <dt>name:</dt>       <dd>required, the component name</dd>
  <dt>type:</dt>       <dd>required, the component type (js or css)</dd>
  <dt>path:</dt>       <dd>required, the path to the script from "base"</dd>
  <dt>requires:</dt>   <dd>array of modules required by this component</dd>
  <dt>optional:</dt>   <dd>array of optional modules for this component</dd>
  <dt>supersedes:</dt> <dd>array of the modules this component replaces</dd>
  <dt>after:</dt>      <dd>array of modules the components which, if present, should be sorted above this one</dd>
  <dt>rollup:</dt>     <dd>the number of superseded modules required for automatic rollup</dd>
  <dt>fullpath:</dt>   <dd>If fullpath is specified, this is used instead of the configured base + path</dd>
  <dt>skinnable:</dt>  <dd>flag to determine if skin assets should automatically be pulled in</dd>
  </dl>
  @method addModule
  @param o An object containing the module data
  @return {boolean} true if the module was added, false if
  the object passed in did not provide all required attributes