Ok, found a solution. I don't know if this creates issues further down the road but...
The Attribute Inspector does have an onShow event but anything inside is ignored. You have to hook into the event that occurs when the attribute inspector receives a feature so I ended up with using the featureLayer onClick event like this:
repairLayer.on("click", function(evt) {
if(evt.ctrlKey) {
// Only display the attribute inspector if the user clicks and holds down the Control key. Otherwise,
// just show the standard infoWindow
dojo.stopEvent(evt); //Prevent the infoWindow from displaying
domStyle.set('leftPanel','display','inline');
var qFeature = new Query();
qFeature.objectIds = [Number(evt.graphic.attributes.OBJECTID)];
qFeature.outFields = ["*"];
qFeature.returnGeometry = false;
repairLayer.selectFeatures(qFeature, FeatureLayer.SELECTION_NEW, function(features) {
if(features.length > 0) {
updateFeature = features[0];
if (!dijit.byId('btnPhotoFolder')) {
//Make sure the button doesn't already exist..
var photoPathButton = new Button({label: " ", "iconClass": "openFolderIcon", id: "btnPhotoFolder", showLabel: false},domConstruct.create("div"));
photoPathButton.onClick = function() {document.getElementById('dirPhotoFolder').click();};
var photoPathField = dijit.byId('dijit_form_TextBox_6');
domConstruct.place(photoPathButton.domNode, photoPathField.domNode, "after");
}
}
});
app.map.resize();
app.map.reposition();
}
});
I'm only using the attribute layer with one, specific layer so I can safely assume some consistency with respect to the name of the dijit I want my button to appear next to. If you had multiple layers tied to your attribute inspector, you'd have some more work with respect to finding where to insert your button.