Double polarity pulse with one single power source and virtual spdt switch
This answer tries to solve the problem as originally stated. Which I understood as, basically, a level shifter that takes 0/5V as input and +12/-12V as output, with an enable/disable option that would put the output in high-impedance state. When enabled, this shifter must be able to source/sink at least 35mA. The timings, however, are not that critical (max switching speed about 10kHz).

Output driver

Here is the circuit I ended with. It is using only discretes (good ol' BJTs), but not many of them. It take +12V and -12V as supplies, and the ENABLE and DATA signals as 5V digital logic. Signal is delayed by a few µS (there is a small difference between delay on low-to high and delay on high-to-low transitions). To simplify the circuit, when ENABLE is inactive, the DATA input must be at low level. Otherwise, output will still be driven. The last important fact is that input and output have opposite polarity (as all RS-232 drivers, as I remember).



LTSpice asc file: http://pastebin.com/6hESR81u

There are a few tricks in this circuit:


The way the first stage of transistors is wired: instead of applying the signal to the base, we apply it to the emitters. But the result is actually simple: when the signal is low (and ENABLE high), Q1 is on and Q2 is off, and when the signal is high, Q2 is on and Q1 is off. Then, if Q1 is on, Q4 is on, providing +12V. If Q2 is on, Q3 is on, providing -12V. As simple as that.
The C1 capacitor: this tricks eliminates the shoot-through on transitions. When the signal changes, there is a short time (due to the inaccuracies, delays involved, ...) during which both Q4 and Q3 conduct. This creates a short from +12V to -12V, and a rather high current can be wasted. C1 forces Q4 and Q3 to change state at the same time, reducing this effect to a minimum.
It is the ENABLE signal which is used as the voltage source to feed Q1 base. If both DATA and ENABLE are low, no transistor is turned on at all.


Note that this circuit must be properly decoupled. Put a 1µ ceramic cap close to Q3 and Q4 supplies.

This circuit can provide at least 50mA of current, given the min Hfe of the transistors suggested. The base of Q3/Q4 are biased with about 1mA. You could go above that by diminishing R2-R9-R8-R4, but the circuit would consume more and the current sourced/sinked from the DATA input would be greater (currently about +/-2mA).

You can make it much faster by putting small caps (in the 100pF range) across the base resistors. But this is not necessary here given the timings required.

Supply

Now, this was just the output signal driving circuit. How about the supplies ? Well, using the MC34063 is a good idea. I have another one, but it is worth it only if you have a spare pin on the microcontroller on which you can output a PWM with 50% duty cycle at about 100kHz (does not need to be accurate). If it is the case, there is a smaller circuit, cheaper, easier to tune, that you can use to generate the -12V from the 12V of the battery. It is a simple inverter charge pump (actually what is done inside the MAX232).

Let's have fun with BJTs again:



LTSpice asc file: http://pastebin.com/QrumUYN3

The part between the input and C3 is yet another level shifting circuit: it takes 0-5V and just outputs 12-0V (inverting the polarity). But this one is made with fewer transistors, because... Well, because. Then, C3, D2, D3, and C4 actually makes the voltage inverting.

Don't forget the decoupling here also (at least 1µ at the 12V input).

This circuit easily provides 70/80mA of current. Note however that there is only one transistor stage, so the input requires about 5/10mA (sink/source) of current.

Now, if you really want to get +12V and -12V from 9V, this becomes impractical. Use both a boost and an inverter switching regulator.