ok, figured it out, buffer accepts some boundaryObservable as parameter. Each time this boundaryObservable emits an item the buffer is collected. So I need just to pass my debounced source as boundary and call buffer on source. Something like this:
source.buffer(source.debounce(500, MILLISECONDS))