docs: function(target, key, value, receiver) {
  		// If the receiver is not this observable (the observable might be on the proto chain),
  		// set the key on the reciever.
  		if (receiver !== this.proxy) {
  			return makeObject.setKey(receiver, key, value, this);
  		}
  
  		// If it has a defined property definiition
  		var computedValue = computedHelpers.set(receiver, key, value);
  		if(computedValue === true ) {
  			return true;
  		}
  
  		// Gets the observable value to set.
  		value = makeObject.getValueToSet(key, value, this);
  		var startingLength = target.length;
  
  		// Sets the value on the target.  If there
  		// is a change, calls the callback.
  		makeObject.setValueAndOnChange(key, value, this, function(key, value, meta, hadOwn, old) {
  
  			// Determine the patches this change should dispatch
  			var patches = [{
  				key: key,
  				type: hadOwn ? "set" : "add",
  				value: value
  			}];
  
  			var numberKey = !isSymbolLike(key) && +key;
  
  			// If we are adding an indexed value like `arr[5] =value` ...
  			if ( isInteger(numberKey) ) {
  				// If we set an enumerable property after the length ...
  				if (!hadOwn && numberKey > startingLength) {
  					// ... add patches for those values.
  					patches.push({
  						index: startingLength,
  						deleteCount: 0,
  						insert: target.slice(startingLength),
  						type: "splice"
  					});
  				} else {
  					// Otherwise, splice the value into the array.
  					patches.push.apply(patches, mutateMethods.splice(target, [numberKey, 1, value]));
  				}
  			}
  
  			// In the case of deleting items by setting the length of the array,
  			// add patches that splice the items removed.
  			// (deleting individual items from an array doesn't change the length; it just creates holes)
  			if (didLengthChangeCauseDeletions(key, value, old, meta)) {
  				patches.push({
  					index: value,
  					deleteCount: old - value,
  					insert: [],
  					type: "splice"
  				});
  			}
  			//!steal-remove-start
  			var reasonLog = [canReflect.getName(meta.proxy)+" set", key,"to", value];
  			//!steal-remove-end
  
  			var dispatchArgs = {
  				type: key,
  				patches: patches,
  				keyChanged: !hadOwn ? key : undefined
  			};
  
  			//!steal-remove-start
  			if(process.env.NODE_ENV !== 'production') {
  				dispatchArgs.reasonLog = reasonLog;
  			}
  			//!steal-remove-end
  
  			mapBindings.dispatch.call( meta.proxy, dispatchArgs, [value, old]);
  
  		});
  
  		return true;
  	}