src/artoo.helpers.js
function extend() {
    var i,
        k,
        res = {},
        l = arguments.length;

    for (i = l - 1; i >= 0; i--)
      for (k in arguments[i])
        if (res[k] && isPlainObject(arguments[i][k]))
          res[k] = extend(arguments[i][k], res[k]);
        else
          res[k] = arguments[i][k];

    return res;
  }
function extend() {
    var i,
        k,
        res = {},
        l = arguments.length;

    for (i = l - 1; i >= 0; i--)
      for (k in arguments[i])
        if (res[k] && isPlainObject(arguments[i][k]))
          res[k] = extend(arguments[i][k], res[k]);
        else
          res[k] = arguments[i][k];

    return res;
  }
function extend ( ) { var i , k , res = { } , l = arguments . length ; for ( i = l - 1 ; i >= 0 ; i -- ) for ( k in arguments [ i ] ) if ( res [ k ] && isPlainObject ( arguments [ i ] [ k ] ) ) res [ k ] = extend ( arguments [ i ] [ k ] , res [ k ] ) ; else res [ k ] = arguments [ i ] [ k ] ; return res ; }
Recursively extend objects
Recursively extend objects