code: function(objA, objB) {
  		// combine all properties ... if the same property, try to take
  		// an intersection ... if an intersection isn't possible ... freak out?
  		var valuesA = objA.values,
  			valuesB = objB.values,
  			foundEmpty = false;
  		var resultValues = {};
  		eachInUnique(valuesA,
  			function(prop, aVal, bVal) {
  				resultValues[prop] = bVal === MISSING ? aVal : set.intersection(aVal, bVal);
  				if (resultValues[prop] === set.EMPTY) {
  					foundEmpty = true;
  				}
  			},
  			valuesB,
  			function(prop, aVal, bVal) {
  				resultValues[prop] = bVal;
  				if (resultValues[prop] === set.EMPTY) {
  					foundEmpty = true;
  				}
  			});
  		if (foundEmpty) {
  			return set.EMPTY;
  		} else {
  			return new KeysAnd(resultValues);
  		}
  
  	}
docs: {foo: zed, abc: d}