code: function(sProperty, vGetter, aArgs, caller) {
  			if (!vGetter) {
  				return;
  			}
  
  			if (!caller) {
  				caller = this;
  			}
  
  			Object.defineProperty(this, sProperty, {
  				configurable: true,
  				get: function() {
  					if (this._mCustomPropertyBag[sProperty]) {
  						return this._mCustomPropertyBag[sProperty];
  					}
  
  					if (!this._mPropertyBag.hasOwnProperty(sProperty)) {
  						this._mPropertyBag[sProperty] = new SyncPromise(function(resolve, reject) {
  						if (typeof vGetter == 'function') {
  								resolve(vGetter.apply(caller, aArgs));
  						} else {
  								resolve(vGetter);
  						}
  						});
  
  					}
  
  					return this._mPropertyBag[sProperty];
  				},
  				set: function(vValue) {
  					this._mCustomPropertyBag[sProperty] = vValue;
  				}
  			});
  		}
docs: Puts a deferred property to the corresponding adapter
  
  @param {string} sProperty the name of an adapters property
  @param {object} vGetter a getter which can be either an object or a function
  @param {array} aArgs an optional array of arguments used if vGetter is a function
  @param {object} the caller that inhabits the vGetter function if not supplied the caller is the current closure