This is a workaround I've used recently. It requires you to define your own token for a single entityreferene field. Assuming you have a module called mymodule, the entityreference field on the node is called field_subnode this will allow you to use the token chains like [node:subnode:title]. Rename mymodule with your own module name and clear your caches after implementing.
/**
* Implements hook_token_info().
*/
function mymodule_token_info() {
return array(
'tokens' => array(
'node' => array(
'subnode' => array(
'name' => t('Node reference'),
'description' => t('Node referenced via field_subnode'),
'type' => 'node',
),
),
),
);
}
/**
* Implements hook_tokens().
*/
function mymodule_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 'subnode' :
$default = '';
if (isset($node->field_subnode)) {
$subnode = entity_metadata_wrapper('node', $node)->field_subnode->value();
$default = $subnode->title;
}
$replacements[$original] = $sanitize ? filter_xss($default) : $default;
break;
}
}
if (isset($node->field_subnode) && $subnode_tokens = token_find_with_prefix($tokens, 'subnode')) {
$subnode = entity_metadata_wrapper('node', $node)->field_subnode->value();
$replacements += token_generate('node', $subnode_tokens, array('node' => $subnode), $options);
}
}
return $replacements;
}