Getting null block_st.text when querying for blocks
If I understand you correctly you are looking to see who is blocking and why, not just gathering overall statistics.  (Both approaches have real value, of course.)

Since every event is transient, so it is not surprising that some values would not return what you expect.  

We have been using the approach outlined by Tony Rogerson quite a few years ago that uses Event Notifications. 

http://sqlblogcasts.com/blogs/tonyrogerson/archive/2007/04/06/event-notifications-monitoring-blocked-processes-and-other-events-end-to-end-how-to-set-it-up-and-make-it-work.aspx

This approach will capture the state of blocking based on a timing trigger.  In the sample code Tony has configured to receive a notification when a block has lasted 10 seconds. (And every 10 seconds after until the block is removed.)

This approach will provide a capture of the XML describing the blocking state at the moment of the event. This includes the blocked and the blocking process.  And if none of the blocks are long enough to capture, then your event table will be very quiet.

You can monitor for shorter or longer blocks, depending on your need.  I generally run at 25 seconds, to cut out a lot of chatter from shorter blocking periods.

New software releases can be a good reason to monitor blocking more closely.