Very simple abstraction, I imagine it's been done before.
It functions almost exactly like [Spigot], except that it also remembers data received when set to block mode, and outputs that data when set to pass mode again.
It takes one optional argument which can be zero or nonzero, just like [Spigot].
Internally it has two versions of this concept working in parallel; one for bangs and one for anythings, with some wires between the two to make sure that receiving a 'bang' doesn't output whatever is stored in the anything slot.
EDIT: It could take nonzero arguments but wasn't handling them properly from the second inlet, that is fixed now. In addition, it can now take 'clear' messages to lose whatever is stored.