You need to check product Stock & skip out of stocks color to your list.
You can did following code on
yourtheme/template/configurableswatches/catalog/product/list/swatches.phtml
$_product = $this->getProduct();
/* get available instock products */
$instockProductsId = array();
$usedProductsArray = array();
$skip = false;
if($_product->getTypeId() == "configurable") {
$usedProducts = $_product->getTypeInstance()->getUsedProducts();
foreach ($usedProducts as $child) {
if ($child->isSalable()) {
$instockProductsId[] = $child->getId();
}
}
}
if(count($instockProductsId)>0){
$skip = true;
foreach($instockProductsId as $id){
$color = Mage::getResourceModel('catalog/product')->getAttributeRawValue($id, 'color', $storeId);
$usedProductsArray[$id] = $color;
}
}
$usedProductsArray = array_unique($usedProductsArray);
then add if condition in foreach loop:
foreach ($_attrValues as $_optionValue => $_optionLabel):
/* To skip out of stock product on list page */
if($skip && !in_array($_optionValue,$usedProductsArray)){
continue;
}
endforeach;