The :type property can determine the provider, if instead of specifying features in the property parameter

    newproperty(:remote_host, :required_features => :remote) do

it's possible to call required_features= in code 

    case self[:type]
    when NFS, CIFS
        required_features = 'file'
    when VMFS
        required_features = 'block'
    end

(Of course, it would probably be good to mark :type as required rather than letting it default to nfs.