Brian, I am using vcarve pro for the gcode. The dropping of the Z is a postprocessor thing. I had questioned about this and was told I had to change in vcarve. I don't use clamps so I never bothered with it. Here is my macro if you are interested in seeing it. Some of the things are handled in other parts in the software and those I am still learning about.

; File: mfunc6.mac
; Desc: Tool change macro for no finger rack mount ATC
;
; Inputs:
; ToolIsUnclamped IS INP2
;
;
; Outputs:
;
; ToolUnclamp IS OUT8
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

O9101
;Enter the XY coordinate of Tool #1
G53 X6.3231Y96.9599
M99

O9102
;Enter the XY coordinate of Tool #2
G53 X11.1710Y96.9599
M99

O9103
;Enter the XY coordinate of Tool #3
G53 X16.019Y96.9599
M99

O9104
;Enter the XY coordinate of Tool #4
G53 X20.8670Y96.9599
M99

O9105
;Enter the XY coordinate of Tool #5
G53 X25.7148Y96.9599
M99

O9106
;Enter the XY coordinate of Tool #6
G53 X30.563Y96.9599
M99

O9107
;Enter the XY coordinate of Tool #7
G53 X35.4107Y96.9599
M99

O9108
;Enter the XY coordinate of Tool #8
G53 X40.2787Y96.9599
M99

O9109
;Enter the XY coordinate of Tool #9
G53 X45.1265Y96.9599
M99

O9110
;Enter the XY coordinate of Tool #10
G53 X49.9675Y96.9599
M99

; Variable Definitions:
;#150 = Tool currently in the spindle
#100 = -8.0 ; Z height of tool rack

;skip if graphing or searching or if at the same tool
IF [[#4120] == [#150]] || #4202 || #4201 THEN GOTO 500

IF (#150 == 0) THEN #150 = 1 ; Initialize tool
G53 Z0 ; Move to tool change height
M3 S0 ; Turn the spindle on
M98 P[#150 + 9100] ; Go to tool location for the tool that's in the spindle
G53 G1 Z[#100] F10 ; Move Z down to the tool rack
M15 ; Unclamp the tool
G53 Z0 ; Move Z up to tool change height
M98 P[#4120 + 9100] ; Go to the desired tool location
G53 G1 Z[#100] F10 ; Move Z down to the tool rack
M16 ; Clamp the tool
G53 Z0 ; Move Z up to tool change height
G53 Y93.5 ; Move Y to clear tool rack
IF #50001 ; Prevent lookahead from parsing past here
#150 = #4120

N500

N1000 ;End of Macro