Here is why it doesn't work.
The duplication is made for the global scope and then all the store specific values are copied.
The catalog_model_product_duplicate
event is dispatched when cloning the global values.
You can take a look at the Magento_Catalog_Model_Product::duplicate()
.
At the end of the method there is this line:
$this->getResource()->duplicate($this->getId(), $newProduct->getId());
This is a call made to Mage_Catalog_Model_Resource_Product::duplicate()
.
This is what copies the store specific values.
You can rewrite this method in your custom module and set your value at the after the original method executes.
You will need this in your config.xml
<models>
<catalog_resource>
<rewrite>
<product>[Namespace]_[Module]_Model_Resource_Product</product>
</rewrite>
</catalog_resource>
</models>
Then create the class [Namespace]_[Module]_Model_Resource_Product
with this content
class [Namespace]_[Module]_Model_Resource_Product extends Mage_Catalog_Model_Resource_Product
{
public function duplicate($oldId, $newId)
{
parent::duplicate($oldId, $newId);
$storeId = your store id here;
Mage::getSingleton('catalog/product_action')->updateAttributes(
array($newId),
array('custom_attribute_code' => 'custom_attribute_value'),
$storeId
);
}
}