How to deconvolve matrix when a model of noise exists?
This isn't (as far as I am aware) a standard approach to deconvolution, but it seems to address your problem:


Assume that your original signal $s$ is distorted by a circulant matrix $\mathbf{C}$ made up of the (shifted) components of your measured signal $m$:
$$
m = \mathbf{C} s
$$
Then just find the generalized inverse of $\mathbf{C}$, denoted $ \mathbf{C}^\dagger$ and form your estimate $\hat{s}$ as:
$$
\hat{s} = \mathbf{C}^\dagger m
$$


The image below shows:


$\color{black}{\tt black}$ :  the original signal in your question.
$\color{red}{\tt red}$ :  the distorted signal in your question.
$\color{green}{\tt green}$ :  100 realizations of inverting a noisy version of your distorted signal.


As you can see, the green estimates bounce around the original noiseless signal reasonably well.





R Code Below

# 31682

# http://stackoverflow.com/a/15796694/12570
circ&lt;-function(x) { 
  n&lt;-length(x)
  matrix(x[matrix(1:n,n+1,n+1,byrow=T)[c(1,n:2),1:n]],n,n)
}

original &lt;- c(0,0,0,1,0,0,0)
distorted &lt;- c(0.001,0.005,0.1,0.5,0.2,0.001,0) 

inverse_matrix &lt;- ginv( circ(distorted[c(4,3,2,1,7,6,5)]) )

Nruns &lt;- 100

output &lt;- inverse_matrix %*% distorted

plot(original, type="l", 
     ylim=c(min(c(original,distorted,noisy_distorted, output)),max(c(original,distorted,noisy_distorted, output))),
     xlim=c(1,length(output)), lwd=5)
lines(noisy_distorted, col="red", lwd=5)

for (runNo in 1:Nruns)
{  
  noisy_distorted &lt;- distorted + rnorm(length(distorted), 0, 0.01)
  output &lt;- inverse_matrix %*% noisy_distorted
  lines(output, col="green")
}

lines(original, lwd=5)

title('Original, distorted, and estimated originals (100 realizations) ')