I have an Array 3723A. To really understand what's happening with any particular load you also need to look at the dynamic characteristics with your intended pulse.
I thought this was an interesting question since I didn't know how the Array 3723A behaves at this low level. I captured a few measurements:
3723A_4mA_steady_state.png: Steady state @4mA. The Array 3723A can be set at 100uA increments, but it doesn't really start drawing anything until 200-300uA. The *average* value is consistent with the setting (minus a small offset), and it goes up incrementally with the setting. But in terms of the noise at this low level it's pretty bad. Maybe it doesn't have enough internal resolution and it's dithering around the result. Dunno.
3723A_4mA_4ms_pulse.png: This is the load with a 4ms pulse applied at 4Hz. The voltage level out the pulse generator was 9V. You can see the current is way off. This is likely due to some combination of the internal circuitry trying to suddenly adapt to the change in input, and also charging of the input capacitor on the 3723A. I suspect you're going to find on a lot of programmable loads with input capacitors that will result in non-ideal behavior.
3723A_4mA_40ms_pulse.png: Increasing the pulse width allows the 3723A to settle to the correct average value, but of course the noise component is back.
BJT_4mA_4ms_pulse.png: For kicks, this is a BJT biased just enough to have a collector current of 4mA. Depending on your requirements, perhaps this would be sufficient, or some other simple current sink circuit.
If you really need a full range programmable solution, I would agree with the others that you're probably looking at an SMU.