AutoCorrelation using FFT of power spectrum
In principle you are doing the right thing. Step 4 should produce a real result unless there is a coding error. Sometimes you add up some residual imaginary part due to numerical noise but, if any, that should be very small. 

Here is an example

%% random signal of length n
n = 128;
x = rand(n,1);
% zero pad
x = [x; zeros(n,1)];
% fft
fx = fft(x);
% mag sqaured
fa = fx.*conj(fx);
% inverse FFT
a = ifft(fa);
% plot
plot(-n+(1:2*n),circshift(a,-n));
answer = {'no','yes'};
fprintf('Is a Real?: %s \n',answer{isreal(a)+1});