This post helped me Combine two data frames by rows (rbind) when they have different sets of columns. So to do a similar thing with yours:
install.packages('plyr')
require(plyr)
answer <- Reduce(rbind.fill,dl)
answer[is.na(answer)] <- 0
answer
name Ai Ac Bi Bc Ci Cc Di Dc Fi
1 a1 2 1 1 0 0 0 0 0 0
2 a2 1 0 3 1 1 0 0 0 0
3 a3 3 2 2 0 3 1 2 2 0
4 a4 3 0 2 0 1 0 0 0 2
BTW nice thought with Reduce
, that's a nifty little function that rarely (at least for me) gets used.