To the best of my knowledge, the only way to do this is via a custom Python layer.
Downscaling blobs in Caffe is a result of producing an output pixel basing on some area around that pixel (receptive field), and the scaling factor depends on the stride between receptive fields. Existing layers only allow you to shift it by an integer value. No matter if it's pooling, convolution or deconvolution, they all work either in integer steps or on per-element basis. For fractional factor resampling you would need to either shift by a non-integer value (impossible) or use a whole different approach - which in this case is the Python layer. You can do it for example with imresize function found in scipy.misc. Yes this will be a significant slowdown as this will force a copy from GPU to CPU, and you will need to execute the resize twice: the feature map on forward pass and the gradients on backward. But I see no other option.
I do not claim to be a Caffe expert though, so you may want to wait for more answers.