most of the default fields being used in web form are correctly turning into tokens but a few fields made with a custom module are not. I can implement a custom hook to define and replace tokens but nothing seems to be happening and no new token appears under the email option for web form.

function custom_webform_token_info(){
    $info['tokens']['submission']['values']['card_fields'] = array(
      'name' => t('card fields'),
      'description' => t('cc info'),
    );
    return $info;
}
function custom_webform_token($type, $tokens, array $data = array(), array $options = array()){
    if($type != 'submission' && empty($data['submission'])){
        return array();
    }
    $replacements = array();
    foreach($tokens as $name => $original){
        $value = $data['submission'];
        $replacements[$original] = $value;
    }
return $replacements;
}
function some_function(){
    token_replace('[submission:values:card_fields]', array('submission'=>$cc_field))
}

i can see hook_info() is called but i dont know if the new token is being added.