Thanks for all the suggestions! Once I wrapped my head around how the CheckBox component works, it was pretty easy to find the solution.
There's no need to add event listeners. The correct way to go about it was to override the updateDisplayList function. updateDisplayList() adds the icons to the display list putting them on top, so all I needed to do was move my Sprite back to the top every time updateDisplayList was called. This function did the trick... override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void { super.updateDisplayList(unscaledWidth, unscaledHeight); if(_midStateSprite != null){ setChildIndex(_midStateSprite,numChildren-1); _midStateSprite.visible = _middle; } }