It's perfectly legitimate to have ScriptData that contains only datum values. This is the case if you are creating a transaction with an output containing a datum hash and the datum lives in the witness set.
In this scenario, the hash becomes
hash(0xa0 + cbor_bytes(datum) + 0xa0)
This scenario is not accounted for in the ScriptData structure and it assumes that Redeemer is required.
