code: function set(nucleus, key, value) {
  		var keys, listener, listeners = nucleus.listeners, missing,
  			listenersCopy = [].concat(listeners), i = listenersCopy.length,
  			props = nucleus.props, oldValue = props[key],
  			had = hasOwn.call(props, key),
  			isObj = value && typeof value === typeObj;
  		props[key] = value;
  		if (!had || oldValue !== value || (isObj && !inArray(objStack, value))) {
  			if (isObj) {
  				objStack.push(value);
  			}
  			while (--i >= 0) {
  				listener = listenersCopy[i];
  				keys = listener.keys;
  				missing = listener.missing;
  				if (missing) {
  					if (hasOwn.call(missing, key)) {
  						delete missing[key];
  						if (isEmpty(missing)) {
  							listener.cb.apply({}, get(nucleus, keys).values);
  							listener.calls--;
  						}
  					}
  				} else if (inArray(keys, key)) {
  					listener.cb.apply({}, get(nucleus, keys).values);
  					listener.calls--;
  				}
  				if (!listener.calls) {
  					removeListener(listeners);
  				}
  			}
  			delete nucleus.needs[key];
  			if (isObj) {
  				objStack.pop();
  			}
  		}
  	}
docs: Property setter