The tricky part is that the timer for the nomination rounds of the SCP protocol starts five seconds after the previous slot's nomination protocol has ended. If you want to have an arbitrary delay between slots while waiting for a transaction, you may want to trigger the start of nomination from something other than the previous round. However, the only events that are guaranteed to be roughly synchronized over intact nodes are confirmation events, because once a single intact node has confirmed a statement, all other intact nodes will do so as soon as messages are exchanged, regardless of what malicious nodes attempt to do.
That said, the way nomination currently works in rounds is an optimization designed so that in the common case only one node nominates a value. The protocol still works (modulo maximum message sizes) if everyone nominates a different value and everyone echoes each other's values. Maybe you could implement two modes, where first you run normal nomination except don't nominate a ledger if you haven't seen any transactions. Then, if by round 5 no one has nominated anything, open up the protocol to nominations from anyone (basically assume neighbors is all nodes you know about).
One final point is that an empty transaction set is not meaningless, as it still increments the timestamp. If, for instance, you are doing an atomic cross chain swap between Stellar and some other blockchain, you want to make sure a pre-signed transaction cannot execute after its timebounds, and having a ledger header whose timestamp exceeds those timebounds is what guarantees this.