code: function mergeRecursive(obj1, obj2) {
  	"use strict";
  
  	/*jshint forin:false */
  	for (var p in obj2) {
  		try {
  			// Property in destination object set; update its value.
  			if (obj2[p].constructor === Object) {
  				obj1[p] = mergeRecursive(obj1[p], obj2[p]);
  			} else {
  				obj1[p] = obj2[p];
  			}
  		} catch(e) {
  			// Property in destination object not set; create it and set its value.
  			obj1[p] = obj2[p];
  		}
  	}
  
  	return obj1;
  }
docs: #source http://stackoverflow.com/a/383245/805649