Hi Eric,
It's not the specific details of the signal so much as it is the context. If you are transforming what is basically a continuous wave, say the sum of a few trig fuctions of various frequencies, and you want to know the amplitude of each component, then you divide by N, the number of points in the array as you said. The reasoning is, suppose the time array has index m and array spacing delt, and you have a signal A*exp(2*pi*i*f0*m*delt), i.e. frequency f0 and amplitude A. For the set of frequencies 'fn' in the frequency domain, each amplitude 'an' is
an = sum{m=0,N-1} A*exp(2*pi*i*f0*m*delt).*exp(-2*pi*i*fn*m*delt)
When fn matches f0, there is a sum of N identical terms of size A which produces N*A. So you have to divide by N to get back to an = A.
[the foregoing ignored some inessential off-by-one indexing issues].
On the other hand, suppose the time domain function is not CW but dies out on each end, such as a gaussian. The die-off takes the cooperation of a lot of closely spaced frequency components, meaning that the fft being used to approximate a continuous integral:
Int g(t)*exp(-2*pi*i*f*t) dt = g(f)
The fft just does an array sum and doesn't know anything about delt, so you need to multiply the sum by dt ~~ delt to approximate the integal. And since delt = 1/fs, you divide by fs.
It's common to use fs as the starting point, with delt = 1/fs and (in the frequency domain) delf = fs/N being derived quantiies. That works, but in my opinion it can sometimes obscure the fundamentals of what is going on.