This problem was solved in the CEM3310 chip long ago by building a rather complicated "composite" 2-quadrant exponential multiplier. (I hope this describes the idea more or less). I have thought about building a discrete circuit that uses the Curtis method for a long time, but the complementary output opamp and the heap of transistors involved in current mirrors have frightened me away.
Then Joachim Verghese came up with his brilliant idea of splitting the exponential multiplier and the positive / negative direction switching of the VCA into separate parts. He presented a circuit with a sign / magnitude full wave rectifier, an exponential multiplier, and an OTA that only switches the sign of the output current (i.e. doesn't contribute to the offset voltage anymore).
Joachim's circuit was, while pleasantly inexpensive, still a rather large circuit, and so I tried to simplify it a little. My idea was to build an expo multiplier that would perform the sign / magnitude stuff all by itself, in other words auto-configure itself to current source or current sink mode, depending on the input current sign. So I came back to the old Curtis idea, but I ended up with a much smaller circuit.
First step: Build two separate expo multipliers, one for source, and one for sink. Their linear inputs and outputs could be connected together - they would not interfere with each other, because one will be passive when the other conducts. This idea was taken from the CEM chip, but I used two npn transistors for the sink part, and two pnp chips for the source part, just as one would do with two separate circuits.
Second step: Use the same opamp for the servo loop around both differential pairs. Unlike the Curtis method, I don't need complementary outputs. A normal opamp will feed both halves alternatively with the right sign of current flow, with a little "dead band" near zero, just like a precision full wave rectifier circuit.
Third step: Both halves of this composite source / sink exponential multiplier would normally need complementary control voltages at the npn / pnp transistor bases. One could simply add an inverter here, but then again these are two transistor pairs, so in order to give them complementary steering from one single CV, I just grounded the 1st transistor's base of the npn pair, and the 2nd transistor's base of the pnp pair, and connected the CV to the two remaining transistor's bases.(It looks like a diagonal connection if you draw it as separate expo converters.)
Fourth step: Redraw the circuit (;->). Well, not such an important step. But if you look at the final version of the schematics, the circuit looks so dead simple that I had the biggest doubts whether it would work at all. But no need to worry - it actually works. I have built it on the breadboard, and I got time constants from milliseconds to the minute range, and no more than 3mV offset. With TL074 opamps and unmatched BC550C and 560C transistors.
I hope that the encouraging results of this little test will keep their promise in general applications - any hints about possible problems are welcome.
Ok, this was a lot of words for those who are interested in the progress of finding this circuit. Here comes the schematic diagram. Don't be afraid by the large drawing. It has an additional Hold function (like the Korg MS-20 EG's), and a standard ADSR or ADS circuit would be a little smaller. I have deliberately chosen to use discrete transistors rather than CMOS switches and gates in order to simplify pcb layout. I've built the prototype on a small strip of veroboard sized 16cm x 4cm.