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<-function(x) {
n<-length(x)
matrix(x[matrix(1:n,n+1,n+1,byrow=T)[c(1,n:2),1:n]],n,n)
}
original <- c(0,0,0,1,0,0,0)
distorted <- c(0.001,0.005,0.1,0.5,0.2,0.001,0)
inverse_matrix <- ginv( circ(distorted[c(4,3,2,1,7,6,5)]) )
Nruns <- 100
output <- 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 <- distorted + rnorm(length(distorted), 0, 0.01)
output <- inverse_matrix %*% noisy_distorted
lines(output, col="green")
}
lines(original, lwd=5)
title('Original, distorted, and estimated originals (100 realizations) ')