This is definitely possible. I've done it to have a custom field store a term id, and user selects from a select list of term names...
You need to implement hook_civicrm_customFieldOptions().
http://wiki.civicrm.org/confluence/display/CRMDOC/hook_civicrm_customFieldOptions
In this provided example below I am using EntityFieldQuery to fetch all terms of the vocabulary with machine name center.
$fieldID is the custom field id
The custom field with ID 4 in my example was configured as an Alphanumeric data type with a Multi-Select widget, but you could use a regular select widget as well.
I hope this gets you started!
function YOURMODULE_civicrm_customFieldOptions( $fieldID, &$options, $detailedFormat = false ) {
if($fieldID == 4) {
$center_query = new EntityFieldQuery();
$center_query->entityCondition('entity_type', 'taxonomy_term');
$center_query->entityCondition('bundle', 'center');
$centers_ids = $center_query->execute();
$detailed_options = array();
$centers = entity_load('taxonomy_term', array_keys($centers_ids['taxonomy_term']));
foreach($centers as $center) {
$label = '';
$label .= ' ' . $center->name;
if($detailedFormat) {
$detailed_options[$center->tid] = array (
'id' => $center->tid,
'value' => $center->tid,
'label' => $label,
);
}
else {
$options[$center->tid] = $label;
}
}
if($detailedFormat) {
$options += $detailed_options;
}
asort($options);
}
}