Ok so I found the variable
{if $product.availability == 'available'}
to be of some use. I have so far got this.
{if $product.availability == 'available'}
[button - add to cart]
{elseif $product.availability == 'unavailable'}
[button - view options] (available with other attributes)
{else}
[button - out of stock]
{/if}
However, the "available with other attributes" and "out of stock" both show the same "view options" button.