Julien,
The big question is whether you want to convolve __across_ dask blocks or __within__ dask blocks.
If you are convolving within the blocks (e.g. you want to do smoothing in space and your dataset is chunked in time), it is easy: you use dask.map_blocks on the underlying xarray.Dataset.data objects. I have an example notebook for this:
I use the astropy convolution operators because they deal with missing data better. (Note: this application motivated a pull request to astropy to release the GIL for better parallel performance. This was merged in version 1.0.4.)
The one downside of this approach is that you have to work with the low-level dask objects. There has been talk about providing a higher-level dask wrapper for this functionality, but it has not been implemented:
https://github.com/pydata/xarray/issues/585
If you want to convolve across dask blocks (e.g. data is chunked in all dimensions), that would have to be implemented in dask. It doesn't sound easy to me, but maybe Matt or Stephen could say otherwise.
-Ryan