I'd create a token for that specific data; I'm not sure it's necessarily better (or worse) than using the alter hook, but it has the advantage of being reusable elsewhere in the site.
A simple (untested) example:
function MYMODULE_token_info_alter(&$data) {
$data['tokens']['node']['field_type_or_title'] = array(
'name' => t('Field type or title'),
'description' => t('Value from field_type if available, node title otherwise.'),
);
}
function MYMODULE_tokens($type, $tokens, array $data = array(), array $options = array()) {
$sanitize = !empty($options['sanitize']);
$replacements = array();
if ($type == 'node' && !empty($data['node'])) {
$node = $data['node'];
if (isset($tokens['field_type_or_title'])) {
if ($items = field_get_items('node', $node, 'field_type')) {
$replacements[$tokens['field_type_or_title']] = $sanitize ? filter_xss($items[0]['value']) : $items[0]['value'];
}
else {
$replacements[$tokens['field_type_or_title']] = $sanitize ? filter_xss($node->title) : $node->title;
}
}
}
return $replacements;
}