UIButton Subclass - Overriding getters to return placeholder/default values
Is this an appropriate use of private variables? Is there any way to accomplish the behavior I want with a single variable rather a second optional settable variable for each color?


This can be much easier accomplished with a lazy stored property:

lazy var buttonColor: UIColor = UIColor.grayColor()
lazy var buttonSelectedColor: UIColor =  self.buttonColor.colorWithAlphaComponent(0.5)


The right-hand side is evaluated exactly once, when the property
is accessed the first time. This makes the private _xxx variables
obsolete. (I think that you seldom need such a "shadow copy" in Swift.)

But there seems to be no real need for buttonColor to be evaluated
lazily. If you make it an ordinary stored property then you can add
a property observer:

var buttonColor = UIColor.grayColor() {
    didSet {
        self.updateButton()
    }
}


If you want buttonSelectedColor to be computed from buttonColor then 
it needs to be a lazy property, otherwise you could make it a stored
property as well:

var buttonSelectedColor = UIColor.grayColor().colorWithAlphaComponent(0.5)  



  Is overriding UIButton properties to call adjustButtonColor in didSet abuse of the getter/setter?


That is fine. The Swift reference explicitly states: "You can also add property observers to any inherited property (whether stored or computed) by overriding the property within a subclass."


  If initWithCoder is a failable initializer do I need to check if self is nil before calling adjustButtonColor()?


You don't need to (and you can't). If

 super.init(coder: aDecoder)


fails then your init?(coder:) method fails immediately, and the next statement
is not reached.