docs: function(reopen, name) {
    return function() {
      // the `reopen` function that was passed in to this function will continue
      // the process of reopening to the function that this is monkey-patching.
      // it is not a recursive call.
  
      // the `recursiveReopen` function, on the other hand, is the reopen
      // function that's actually defined on the class object and will allow us
      // to restart the reopen process from the beginning for each individual
      // mixin that we find.
      var recursiveReopen = Class.__metaclass__.prototype[name];
      var args = _.toArray(arguments);
  
      var properties = args.shift();
      if (properties instanceof Mixin.__class__) {
        properties.__flatten__().forEach(function(mixin) {
          recursiveReopen.call(this, mixin);
        }, this);
        properties = {};
      }
      args.unshift(properties);
  
      return reopen.apply(this, args);
    };
  }