docs: function createFactory() {
    return function Stamp(options) {
      var descriptor = Stamp.compose || {};
      // Next line was optimized for most JS VMs. Please, be careful here!
      var obj = {__proto__: descriptor.methods}; // jshint ignore:line
  
      merge(obj, descriptor.deepProperties);
      assign(obj, descriptor.properties);
      Object.defineProperties(obj, descriptor.propertyDescriptors || {});
  
      if (!descriptor.initializers || descriptor.initializers.length === 0) return obj;
  
      if (options === undefined) options = {};
      var inits = descriptor.initializers;
      var length = inits.length;
      for (var i = 0; i < length; i += 1) {
        var initializer = inits[i];
        if (isFunction(initializer)) {
          var returnedValue = initializer.call(obj, options,
            {instance: obj, stamp: Stamp, args: slice.apply(arguments)});
          obj = returnedValue === undefined ? obj : returnedValue;
        }
      }
  
      return obj;
    };
  }