You can only omit optional parameters from right to left, such as:
echo smallBOX('gray','head_2','body_2');
echo smallBOX('gray','head_2');
echo smallBOX('gray');
echo smallBOX();
With echo smallBOX('','head_1','body_1'); you are actually passing a value for the first arg, even if it is just an empty string. You would have to add some additional logic to your function if you want to apply a default in that case:
function smallBOX($color='gray',$head='',$body='')
{
if(trim($color) === '')
{
$color = 'gray';
}
echo $color;
echo $head;
echo $body;
}