code: function shimIsPlainObject(value) {
      var ctor,
          result;
  
      // avoid non Object objects, `arguments` objects, and DOM elements
      if (!(value && toString.call(value) == objectClass) ||
          (ctor = value.constructor, isFunction(ctor) && !(ctor instanceof ctor)) ||
          (!support.argsClass && isArguments(value)) ||
          (!support.nodeClass && isNode(value))) {
        return false;
      }
      // IE < 9 iterates inherited properties before own properties. If the first
      // iterated property is an object's own property then there are no inherited
      // enumerable properties.
      if (support.ownLast) {
        forIn(value, function(value, key, object) {
          result = hasOwnProperty.call(object, key);
          return false;
        });
        return result !== false;
      }
      // In most environments an object's own properties are iterated before
      // its inherited properties. If the last iterated property is an object's
      // own property then there are no inherited enumerable properties.
      forIn(value, function(value, key) {
        result = key;
      });
      return result === undefined || hasOwnProperty.call(value, result);
    }
docs: A fallback implementation of `isPlainObject` which checks if a given `value`
  is an object created by the `Object` constructor, assuming objects created
  by the `Object` constructor have no inherited enumerable properties and that
  there are no `Object.prototype` extensions.
  
  @private
  @param {Mixed} value The value to check.
  @returns {Boolean} Returns `true`, if `value` is a plain object, else `false`.