You can do an outer merge, set the new index to Dat, sort it, forward fill, and then reindex based on the dates in pub.
pubdates = ['2015-01-01', '2015-01-04', '2015-01-06']
pub = pd.DataFrame([dt.datetime.strptime(ts, '%Y-%m-%d').date() for ts in dates],
columns=['Dat'])
>>> (ref
.merge(pd.DataFrame(pub, columns=['Dat']), on='Dat', how='outer')
.ffillset_index('Dat')
.set_indexsort_index('Dat')
.ffill()
.reindex(pub.Dat))
col1 col2
Dat
2015-01-01 5 4
2015-01-04 86 97
2015-01-06 8 9