This solution isn't bound to a strict model or a resource model and can be used to retrieve an option label of an attribute that is assigned to whatever entity type:
// In your case $entityType should be `catalog_product`
$attribute = Mage::getModel('eav/config')->getAttribute($entityType, $attributeCode);
echo $attribute->getSource()->getOptionText($optionId);
FYI, $attribute->getSource()
returns an instance of Mage_Eav_Model_Entity_Attribute_Source_Table
which has the following methods:
Array
(
[0] => getAllOptions
[1] => getOptionText
[2] => addValueSortToCollection
[3] => getFlatColums
[4] => getFlatIndexes
[5] => getFlatUpdateSelect
[6] => setAttribute
[7] => getAttribute
[8] => getOptionId
[9] => getIndexOptionText
)
I should note that Method 1 from accepted answer throws an SQL error in Magento v1.9.4 (I'm not sure about the other versions):
Column 'option_id' in where clause is ambiguous
The reason could be found in the below generated SQL query:
SELECT
`main_table`.*,
`tdv`.`value` AS `default_value`,
`tsv`.`value` AS `store_default_value`,
IF
( tsv.value_id > 0, tsv.VALUE, tdv.VALUE ) AS `value`
FROM
`eav_attribute_option` AS `main_table`
INNER JOIN `eav_attribute_option_value` AS `tdv` ON tdv.option_id = main_table.option_id
LEFT JOIN `eav_attribute_option_value` AS `tsv` ON tsv.option_id = main_table.option_id
AND tsv.store_id = 0
WHERE
( tdv.store_id = 0 )
# This is the culprit
AND ( `option_id` IN ( 9999 ) )