For creating custom token we will use three token api function.

/**
 * @file
 * Provides special token to use with pathauto.
 *
 * @see httx://drupal.org/node/1308488
 */

/**
 * Provide information about our custom placeholder/token.
 *
 * @see httx://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_token_info/7
 * @see httx://api.lullabot.com/token_example_token_info/7
 * @return array
 *   An associative array of available tokens and token types.
 */
function MODULE_NAME_token_info() {
  $info['tokens']['node']['pathauto'] = array(
    'name' => t('Pathauto'),
    'description' => t('Title ready for use with pathauto.'),
  );
  return $info;
}

/**
 * Provide replacement values for placeholder tokens.
 *
 * @see httx://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_tokens/7
 * @see httx://api.lullabot.com/token_example_tokens/7
 * @param string $type
 *   The machine-readable name of the type (group) of token being replaced, such
 *   as 'node', 'user', or another type defined by a hook_token_info()
 *   implementation.
 * @param array $tokens
 *   An array of tokens to be replaced. The keys are the machine-readable token
 *   names, and the values are the raw [type:token] strings that appeared in the
 *   original text.
 * @param array $data (optional)
 *   An associative array of data objects to be used when generating replacement
 *   values, as supplied in the $data parameter to token_replace().
 * @param array $options (optional)
 *   An associative array of options for token replacement; see token_replace()
 *   for possible values.
 * @return array
 *   An associative array of replacement values, keyed by the raw [type:token]
 *   strings from the original text.
 */
function MODULE_NAME_tokens($type, $tokens, array $data = array(), array $options = array()) {
  $replacements = array();
  $sanitize = !empty($options['sanitize']);

  if ($type == 'node' && !empty($data['node'])) {
    $node = $data['node'];

    foreach ($tokens as $name => $original) {
      switch ($name) {
        case 'pathauto':
          $replacements[$original] = str_replace(
            array('&', '&'),
            'and',
            $sanitize ? filter_xss($node->title) : $node->title
          );
          break;
      }
    }
  }

  return $replacements;

References