Your current use-case doesn't need copy(), IIUC; presumably NULL means "take over ownership"; this should be documented.
Likewise, the meaning of destroy == NULL.  I guess copy() is called in Append and destroy() is called when trampling on a value.  These are all worth documenting.