code: function() {
        var assign = {};
        multiArgs(arguments, function(a, i) {
          if(isObject(a)) {
            simpleMerge(assign, a);
          } else {
            assign[i + 1] = a;
          }
        });
        return this.replace(/\{([^{]+?)\}/g, function(m, key) {
          return hasOwnProperty(assign, key) ? assign[key] : m;
        });
      }
docs: *
  @method assign(<obj1>, <obj2>, ...)
  @returns String
  @short Assigns variables to tokens in a string.
  @extra If an object is passed, it's properties can be assigned using the object's keys. If a non-object (string, number, etc.) is passed it can be accessed by the argument number beginning with 1 (as with regex tokens). Multiple objects can be passed and will be merged together (original objects are unaffected).
  @example
  
  'Welcome, Mr. {name}.'.assign({ name: 'Franklin' })   -> 'Welcome, Mr. Franklin.'
  'You are {1} years old today.'.assign(14)             -> 'You are 14 years old today.'
  '{n} and {r}'.assign({ n: 'Cheech' }, { r: 'Chong' }) -> 'Cheech and Chong'
  
  *