As a result of not knowing how to do any better, I have stuck to Fourier restorations, which can be counted on to be linear. Even so, there are precautions to be taken. My associates and I have learned, the hard way, that you have to avoid discontinuities at the edges, match opposite sides and preferably taper with a cosine bell, that you have to subtract out stars that overlap the edge, and so on.
Even a method as simple-minded as Fourier has one difficulty: filtering. Here the best that I have found is the STSDAS task wiener, which creates a so-called ``optimum filter.'' The task has a number of options, though; my experience has been that on HST images it gives the best results when run with the default options. (But since the time of the Workshop I have heard that others have achieved better results by using a signal model that is rather sharp.) Even so, I've gotten some results that had obvious noise artifacts and needed a further low-pass filtering. And it's annoying that the restoration of a piece cut out of an image gives a result different from the way that piece looks when you restore the entire image. (This is because of the way ``wiener'' goes out to the edge of the transform of whatever image it has, to estimate the noise.)