docs: function (arr, arr_name, config) {
  	
  	if (l_names.hasOwnProperty(arr_name)) {
  		LOG.warn('array [' + arr_name + '] already sync with DB', 'SR.Sync');
  		//return UTIL.safeCall(onDone, false);
  		return false;
  	}
  	
  	// first override the array's functions	
  	arr.push = l_push;
  	
  	// store array's name
  	arr._name = arr_name;
  	
  	// store last stored index
  	arr._index = 0;
  
  	// store to list of arrays
  	l_names[arr_name] = arr;
  	
  	// NOTE: the DB creation may finish *after* this function returns
  	// check if the array has been created inside DB, if not then create new record
  	SR.DB.getArray(SR.Settings.DB_NAME_SYNC,
  					function (result) {
  						// NOTE: if array does not exist it'll return success with an empty array
  						if (result === null || result.length === 0) {
  
  							LOG.sys('array [' + arr_name + '] does not exist, create...', 'SR.Sync');
  							SR.DB.setData(SR.Settings.DB_NAME_SYNC, {name: arr_name, data: []}, 
  											function (r) {
  												LOG.sys('array [' + arr_name + '] create success', 'SR.Sync');
  												//UTIL.safeCall(onDone, true);
  											},
  											function (r) {
  												LOG.error('array [' + arr_name + '] create fail', 'SR.Sync');
  										  		//UTIL.safeCall(onDone, false);
  											});
  						}
  						else {
  							LOG.sys('array [' + arr_name + '] exists', 'SR.Sync');
  							LOG.warn(result);
  							//UTIL.safeCall(onDone, true);										
  						}
  					}, 
  					function (result) {
  						//UTIL.safeCall(onDone, false);
  					}, 
  					{name: arr_name});		
  
  	return true;
  	
  	// TODO: consider config's effect
  }