Has anyone done a guide on how to program the AI for these? I'd be willing to give it a shot if someone could give me some pointers.
No, but I probably could quickly enough. The problem with Civ4 itself is that while the AI has some good tools at its disposal with the various weight and flavor settings they also include a lot of random variables that end up breaking the AI in the end.
You can do a LOT to fix the AI without touching the SDK or even Python by simply reducing or removing a lot of the random chance values in the leaderheadinfos xml file and allowing the AI to use the flavor values. If you fix the way they build units and buildings and you'll solve most of their issues. The only thing they really need to 'fix' with code for FfH is getting the AI to understand and use the features, abilities, spells, etc.
Here are some examples of xml tweaks to play with from the start:
In Civ4UnitInfos.xml fix all of the <iPower> values for every unit to be a more accurate representation of the units combat abilities. The AI uses this to determine how strong they are and how strong their opponents are. Default Civ4 values are too low resulting in little difference between units that are substantially better than others. A good place to start is to match the iPower value to the unit's own iCombat (or for FfH specifically the average of the attack & defense strength) and then adjusting as needed for less obvious unit strengths. They will make better choices when deciding what tech to research, what units & buildings to build, what units to upgrade and when to go to war. Also in this file you can adjust the definitions for UNITAI and NOT_UNITAI to help the AI use units more appropraitely. A good example here is giving workboats UNITAI_EXPLORE_SEA as a 'NOT' unitAI value so the AI will only build them when they need them and not when they want to explore the sea a bit.
In Civ4LeaderHeadInfos.xml look for the various probabilities and reduce or eliminate their chance. Be careful, any value with 'prob' in it's name is a 1-in-this number probability unless it is set to zero which will mean never. The best example here is building wonders, a low value in that probability will force the AI to build wonders (and projects) even if it really doesn't want to. Set to zero and the AI will only build wonders that it wants (based on its evaluation of the wonder modified by flavors) when it can handle it. This is mostly true for all of the probability values for each leader in that setting it to zero won't disallow it, it will simply not force it. The values with 'rand' in ther names are a percentage chance, so the game generates a number between 1-100 and if less than this value it will do whatever it is. So 100 is always and zero is never. Flavor weights for the leaders can range from negative values to possitive values, try not to exceed +/- 1000 as the resulting modified value can crash the game or cause misleading bugs with overflows ('flipping' integer values).
For technologies, buildings, units and improvements the AI will evalute them very well based on what it needs. That value will then be modified by the flovors assigned to the leaders and the individual items as well as the AI weight, if applicable. Exceptionally high or low values for flavors will essentially force the AI's descision making process which can be handy in some cases with techs or units the AI would otherwise ignore. In general lower flavor values will result in more intelligent descisions IF the AI understands the full benefits. This might be tricky if the FfH DLL hasn't been updated to get the AI to understand and properly value some of the effects not present in the default game. At the same time, the flovor and AI weights can be used to encourage the AI to use stuff it normally wouldn't. Sometimes taking a backwards approach and instead discouraging the AI from something it seems predisposed to build a lot of will work better than encourage them to build something else.
For any of this to work you also need to be sure that everything in the game currently is consistant. As long as every unit, for example, follows the same rules for which UNITAI settings it uses than UNITAI weights for the leaders will work as expected. If anything is out of whack though... you're in for a lot of work and some frustration as was my experience when first working on the AI changes for TAM some time ago. I did an old tutorial for leader relations a while back, it shoudl still be burried in the tutorial board here somewhere, that should help with understanding the basics of the leaderhead file.
So there you go, a wall-of-text quick guide.
Disclaimer: This is all from memory so some of the file and value names used as examples may be wrong, but they should at least be close and give you somewhere to start.