text: //    (The MIT License)
  //
  //    Copyright (c) 2012 Richard S Allinson <rsa@mountainmansoftware.com>
  //
  //    Permission is hereby granted, free of charge, to any person obtaining
  //    a copy of this software and associated documentation files (the
  //    'Software'), to deal in the Software without restriction, including
  //    without limitation the rights to use, copy, modify, merge, publish,
  //    distribute, sublicense, and/or sell copies of the Software, and to
  //    permit persons to whom the Software is furnished to do so, subject to
  //    the following conditions:
  //
  //    The above copyright notice and this permission notice shall be
  //    included in all copies or substantial portions of the Software.
  //
  //    THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
  //    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  //    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  //    IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  //    CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  //    TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  //    SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  
  'use strict';
  
  /**
   * Merge object b with object a.
   *
   *     var a = { foo: 'bar' }
   *       , b = { bar: 'baz' };
   *     
   *     utils.merge(a, b);
   *     // => { foo: 'bar', bar: 'baz' }
   *
   * @param {Object} a
   * @param {Object} b
   * @return {Object}
   * @api private
   */
  
  exports.merge = function (a, b) {
  
      var key;
  
      if (a && b) {
          for (key in b) {
              if (b.hasOwnProperty(key)) {
                  a[key] = b[key];
              }
          }
      }
  
      return a;
  };
  
  /**
   *
   */
  
  exports.keyExists = function (key, obj) {
  
      if ('string' === typeof key) {
          key = key.split('.');
      }
  
      if (key.length === 0) {
          return true;
      }
  
      if (obj[key[0]]) {
          return this.keyExists(key.slice(1), obj);
      }
  
      return false;
  };
  