code: function normalizeArgsForDefineSubClass (superClass, constructor, methods, statics) {
          superClass = superClass || Object.create(Object.prototype);
  
          // Snatched statics
          var _statics;
  
          // Should extract statics?
          if (isFunction(superClass)) {
              // Extract statics
              _statics = Object.keys(superClass).reduce(function (agg, key) {
                  if (key === 'extend' || key === 'extendWith') { return agg; }
                  agg[key] = superClass[key];
                  return agg;
              }, {});
          }
  
          // Re-arrange args if constructor is object
          if (isObject(constructor)) {
              statics = methods;
              methods = clone(constructor);
              constructor = ! isFunction(methods.constructor) ? standInConstructor(superClass) : methods.constructor;
              unset(methods, 'constructor');
          }
  
          // Ensure constructor
          constructor = isset(constructor) ? constructor : standInConstructor(superClass);
  
          // Returned normalized args
          return {
              constructor: constructor,
              methods: methods,
              statics: extend(_statics || {}, statics || {}, true),
              superClass: superClass
          };
      }
docs: Normalized the parameters required for `defineSubClassPure` and `defineSubClass` to operate.
  @param superClass {Function} - Superclass to inherit from.
  @param constructor {Function|Object} - Required.  Note:  If this param is an object, then other params shift over by 1 (`methods` becomes `statics` and this param becomes `methods` (constructor key expected else empty stand in constructor is used).
  @param methods {Object|undefined} - Methods for prototype.  Optional.  Note:  If `constructor` param is an object, this param takes the place of the `statics` param.
  @param statics {Object|undefined} - Constructor's static methods.  Optional.  Note:  If `constructor` param is an object, this param is not used.
  @returns {{constructor: (Function|*), methods: *, statics: *, superClass: (*|Object)}}