code: function(_name, _fun, _mapping) {
          if(typeof _name === 'string') {
            this[_name] = Utils.override(this[name], _fun);
            if(_mapping) mappings.push({ fun: _name, sign: _mapping });
          } else Utils.extendOverriden(this, _name);
          return this;
        }
docs: @memberof BuilderApi#
  
  @description Extends the builder DSL
  
  Adds a function to de builder and alternatively maps the function to an
  attribute definition keyword that can be later used when calling
  `define` or `attribute`.
  
  Mapping works as following:
  
  // Given the following call
  builder.extend('testAttr', function(_attr, _test, _param1, param2) {
  // wharever..
  }, ['test', 'testP1', 'testP2']);
  
  // A call to
  builder.attribute('chapter', { test: 'hello', testP1: 'world' });
  
  // Its equivalent to
  builder.testAttr('chapter', 'hello', 'world');
  
  The method can also be passed an object with various methods to be added.
  
  @param {string|object} _name function name or object to merge
  @param {function} _fun function
  @param {array} _mapping function mapping definition
  @return {BuilderApi} self