code: function without(remove) {
      // Calling .without() with no arguments is a no-op. Don't bother cloning.
      if (typeof remove === "undefined" && arguments.length === 0) {
        return this;
      }
  
      if (typeof remove !== "function") {
        // If we weren't given an array, use the arguments list.
        var keysToRemoveArray = (Array.isArray(remove)) ?
           remove.slice() : Array.prototype.slice.call(arguments);
  
        // Convert numeric keys to strings since that's how they'll
        // come from the enumeration of the object.
        keysToRemoveArray.forEach(function(el, idx, arr) {
          if(typeof(el) === "number") {
            arr[idx] = el.toString();
          }
        });
  
        remove = function(val, key) {
          return keysToRemoveArray.indexOf(key) !== -1;
        };
      }
  
      var result = instantiateEmptyObject(this);
  
      for (var key in this) {
        if (this.hasOwnProperty(key) && remove(this[key], key) === false) {
          result[key] = this[key];
        }
      }
  
      return makeImmutableObject(result);
    }
docs: Returns an Immutable copy of the object without the given keys included.
  
  @param {array} keysToRemove - A list of strings representing the keys to exclude in the return value. Instead of providing a single array, this method can also be called by passing multiple strings as separate arguments.